iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
自我挑戰組

基礎前端+後端網站分享之留言板製作系列 第 29

第二十九天--不同使用者不能影響其他使用者留言

  • 分享至 

  • xImage
  •  

今天不是介紹東西,今天要來加強(解決才對)之前留言板的問題。

有兩個問題

  1. 改變/刪除其他人的留言
    之前留言板你能改變其他使用者的留言,這不合理吧,我要讓使用者只能改自己的。

  2. 使用網址改變其他人的留言
    如果你直接使用網址,並且取得文章的代碼(id),也能改變,這容易讓有心人士去攻擊我弱小無助沒人看的網頁。

這程式碼結合了之前文章的Session、foreach的輸出格式、var_dump的測試和header。


Home.php程式碼

<!DOCTYPE html>
<html lang="en">
<?php
include("../php/datatable.php");
if (!(isset($_SESSION["user_name"]))) {
    header('Location:/30days/message_board/screen/login.php');
}
$comments = getAllComments();
?>

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-wEmeIV1mKuiNpC+IOBjI7aAzPcEZeedi5yW5f2yOq55WWLwNGmvvx4Um1vskeMj0" crossorigin="anonymous">
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-p34f1UUtsS3wqzfto5wAAmdvj+osOnFyQFpp4Ua3gs/ZVWx6oOypYoCJhGGScy+8" crossorigin="anonymous"></script>
    <title>留言板</title>
</head>

<body>
    <ul class="nav nav-tabs justify-content-center">
        <li class="nav-item">
            <a class="nav-link active" aria-current="page" href="Home.php">留言板</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="register.php">註冊</a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="../php/sign_out.php">登出</a>
        </li>
    </ul>

    <div class="mb-5 pb-5">
        <h1 class="text-center">留言板</h1>

        <div class="mx-5 mt-5">
            <form method="POST" action="../php/create_comment.php">
                <p class="input-group-text text-light bg-dark">
                    暱稱:<?php echo $_SESSION["user_name"]; ?>
                </p>
                <div class="">
                    <div class="input-group-prepend">
                        <span class="input-group-text text-light bg-dark">評論: </span>
                    </div>
                    <textarea class="form-control" name="comment" required="required" cols="40" rows="5" placeholder="輸入評論"></textarea>
                </div>
                <input type="hidden" name="id" value="id">
                <input type="submit" name="submit" class="btn btn-dark" value="新增資料" style="float:left">
            </form>



        </div>

    </div>

    <div>
        <h2 class="mt-4 text-center">留言:</h2>
        <?php
        foreach ($comments as $row) {
        ?>
            <div class="mx-3 my-3">
                <h5 class="mx-3 mt-2"><?php echo $row["name"]; ?></h5>
                <p class="mx-3"><?php echo $row["comment"]; ?></p>

                <?php
                if ($_SESSION["user_name"] == $row["name"]) {
                ?>

                    <div>
                        <a href="../php/edit_comment.php?id=<?php echo $row['id'] ?>">
                            <input type="submit" value="修改" class="btn btn-dark mx-3" style="float:right">
                        </a>
                        <form method="POST" action="../php/delete_comment.php">
                            <input type="hidden" name="id" value="<?php echo $row['id'] ?>">
                            <input type="submit" value="刪除" class="btn btn-danger" style="float:right">
                        </form>


                    </div>
                <?php
                }
                ?>
            </div>
        <?php
        }
        ?>
    </div>
</body>

</html>

透過使用if來判斷文章留言者和登入者是否同一個人,透過var_dump來測試並找出$row["name"] (就是文章留言者),如果視同個人,就會把編輯留言和刪除留言按鈕顯示出來。


edit_comment.php程式碼

<?php

include("datatable.php");
$id = $_GET['id'];
$statement = editComment($id);

if ($_SESSION["user_name"] != $statement[0]["name"]) {
    header('Location:/30days/message_board/screen/login.php');
}
include("../screen/edit_form.php");

透過editComment的方式取得文章留言者(為$statement[0]["name"]),再透過Session來取得登入者的帳號,通過if去比對,相同則能進入(edit_comment.php)畫面,直接使用網址卻不是留言者的人則會返回登入介面。


成果影片:
Yes


上一篇
第二十八天--介紹篇之程式撰寫規範(Coding Style Guide)
下一篇
第三十天--有兩個資料庫的錯誤問題解決
系列文
基礎前端+後端網站分享之留言板製作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言